home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
games
/
wakka
/
source
/
pad.c
< prev
next >
Wrap
Text File
|
2000-06-25
|
2KB
|
105 lines
/******************************
わっか
入力
******************************/
#include <sys\iocs.h>
#include "wakka.h"
#include "pad.h"
static PAD pad_data = 0xffff; /* パッドの状態 */
static PAD pad_just; /* 今回の変化 */
static PAD pad_rept; /* リピート付き */
static Bool read_flag = TRUE; /* 状態取得があったか */
static int pad_cnt = 16; /* リピート用カウンタ */
Bool esc_key = FALSE; /* ESCキー */
Bool esc_last = TRUE;
/********************
パッド同期処理
********************/
void pad_synch(void)
{
int k1, k2;
PAD last, last_j, last_r;
last = pad_data; /* 前回の状態 */
last_j = pad_just;
last_r = pad_rept;
pad_data = ~_iocs_joyget(0); /* スティックデータ取得 */
k1 = _iocs_bitsns(0x08); /* キー入力 */
k2 = _iocs_bitsns(0x09);
if ( k1 & 0x10 ) { /* 8 */
pad_data |= PAD_UP;
}
if ( k2 & 0x10 ) { /* 2 */
pad_data |= PAD_DOWN;
}
if ( k1 & 0x80 ) { /* 4 */
pad_data |= PAD_LEFT;
}
if ( k2 & 0x02 ) { /* 6 */
pad_data |= PAD_RIGHT;
}
k1 = _iocs_bitsns(0x06);
if ( k1 & 0x20 ) { /* スペース */
pad_data |= PAD_A;
}
k1 = _iocs_bitsns(0x03);
k2 = _iocs_bitsns(0x09);
if ( (k1 & 0x20) || (k2 & 0x40) ) { /* RET,ENTER */
pad_data |= PAD_B;
}
pad_just = pad_data & ~last; /* 変化データ */
pad_rept = pad_just; /* リピート付き */
if ( pad_data == last ) {
if ( --pad_cnt == 0 ) {
pad_rept = pad_data;
pad_cnt = 4;
}
}
else {
pad_cnt = 16;
}
if ( !read_flag ) {
pad_just |= last_j;
pad_rept |= last_r;
}
read_flag = FALSE;
if ( _iocs_bitsns(0) & 0x02 ) { /* ESCキー */
esc_key = TRUE;
}
}
/****************************
パッド状態取得
戻り値 パッド状態
****************************/
PAD get_pad(void) /* そのまま */
{
return pad_data;
}
PAD get_push(void) /* 押した直後 */
{
read_flag = TRUE;
return pad_just;
}
PAD get_rept(void) /* リピート付き */
{
read_flag = TRUE;
return pad_rept;
}
/********** End of File *******************************************/